package com.dbms;

import java.lang.reflect.Method;

public class BeanTool {

	/**
	 * 为Bean赋值
	 * @param ojbClass	BeanClass
	 * @param ojb		Bean对象
	 * @param methodName 赋值方法名称
	 * @param value	值
	 * @return	是否赋值成功
	 */
	public static boolean setBean(Class<?> ojbClass,Object ojb,String methodName,Object value){
		//获得要赋值的方法名称
		Method[] ms=ojbClass.getMethods();
		for(Method m:ms){
			if(m.getName().equalsIgnoreCase(methodName)){
				try {
					m.invoke(ojb, value);
					return true;
				} catch (Exception e) {
					// TODO Auto-generated catch block
//					e.printStackTrace();
					try {
						m.invoke(ojb, value.toString());
						return true;
					} catch (Exception e1) {
						// TODO Auto-generated catch block
//						e1.printStackTrace();
					}
				}
			}
		}
		return false;
	}
	/**
	 * 为数据类型为BigDecimal的Bean赋值
	 * @param ojbClass	BeanClass
	 * @param ojb		Bean对象
	 * @param methodName 赋值方法名称
	 * @param value	值
	 * @return	是否赋值成功
	 */
	public static boolean setBeanBigDecimal(Class<?> ojbClass,Object ojb,String methodName,Object value){
		//获得要赋值的方法名称
		Method[] ms=ojbClass.getMethods();
		for(Method m:ms){
			if(m.getName().equalsIgnoreCase(methodName)){
				try {
					String className=m.getParameterTypes()[0].getName();
//					System.out.println("method="+name+" leng="+m.getParameterTypes()[0].getCanonicalName());
					className="double".equals(className)?"java.lang.Double":
						"float".equals(className)?"java.lang.Float":
							"long".equals(className)?"java.lang.Long":
								"int".equals(className)?"java.lang.Integer":
									"short".equals(className)?"java.lang.Short":
										"byte".equals(className)?"java.lang.Byte":className;
					Class<?> c=Class.forName(className);
					if(value instanceof java.math.BigDecimal){//
						if(c==java.lang.Double.class){//java.lang.Double
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.doubleValue());
						}else if(c==java.lang.Float.class){//java.lang.Float
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.floatValue());
						}else if(c==java.lang.Long.class){//java.lang.Long
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.longValue());
						}else if(c==java.lang.Integer.class){//java.lang.Integer
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.intValue());
						}else if(c==java.lang.Short.class){//java.lang.Short
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.shortValue());
						}else if(c==java.lang.Byte.class){//java.lang.Byte
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, decimal.byteValue());
						}else if(c==java.lang.String.class){//java.lang.String
							java.math.BigDecimal decimal=(java.math.BigDecimal)value;
							m.invoke(ojb, String.valueOf(decimal.intValue()));
						}
					}else{//非java.math.BigDecimal类型处理
						m.invoke(ojb, value);
					}
					return true;
				} catch (Exception e) {
					try {
						m.invoke(ojb, value.toString());
						return true;
					} catch (Exception e1) {
						// TODO Auto-generated catch block
//						e1.printStackTrace();
					}
					// TODO Auto-generated catch block
//					e.printStackTrace();
				}
			}
		}
		return false;
	}
	/**
	 * 获得Bean数据
	 * @param obj Bean对象
	 * @param methodName 所要获取数据的方法名
	 * @return 返回数据
	 */
	public static Object getBean(Object obj,String methodName){
		Class<?> objClass=obj.getClass();
		Method[] ms=objClass.getMethods();
		for(Method m:ms){
			if(m.getName().equalsIgnoreCase(methodName)){
				try {
					Object result=m.invoke(obj,null);
					return result;
				} catch (Exception e) {
					// TODO Auto-generated catch block
//					e.printStackTrace();
				}
			}
		}
		return null;
	}
}
